In Triton, l'unità fondamentale di esecuzione passa dal thread scalare CUDA all' istanza di programma. Questo rappresenta un'astrazione di un blocco di thread GPU, dove un'istanza singola gestisce contemporaneamente un blocco vettorizzato di elementi.
1. L'identità dell'istanza di programma
Ogni unità di esecuzione recupera la propria identità tramite pid = tl.program_id(asse=0). Pensa a un carrello elevatore in magazzino (l'istanza di programma) che solleva un pallet (il blocco) di 128 scatole, rispetto a un singolo operatore (thread CUDA) che solleva una sola scatola.
2. Triton vs. tensori di PyTorch
Comprendere il divario semantico è fondamentale per la gestione della memoria:
- Tensor di PyTorch: Un oggetto Python lato host che racchiude lo spazio di memorizzazione VRAM, i passi e i metadati.
- Tensor di Triton: Un oggetto a livello di compilatore che rappresenta valori o puntatori residenti in registri o SRAM.
Oggetto Python che punta a memoria globale contigua.
Un blocco 2D/1D di dati all'interno dei registri del compilatore.
3. Natura SPMD
Triton segue un modello Programma singolo, dati multipli (SPMD) di flusso. Ogni istanza di programma esegue il esatto stesso codice. La divergenza si verifica solo quando la logica utilizza il pid per calcolare offset di memoria specifici.